package com.xtinno.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xtinno.mapper.LawReasoningKnowledgeMapper;
import com.xtinno.pojo.dto.LawReasoningRequestDTO;
import com.xtinno.pojo.po.LawReasoningKnowledgePO;
import org.apache.logging.log4j.util.Strings;

import java.util.Collections;
import java.util.List;
import java.util.Optional;

import org.springframework.stereotype.Service;

/**
 * 封装了 法条知识库（LawReasoningKnowledge） 相关的业务逻辑操作.
 *
 * @author lizhen
 * @since 1.0.0
 */
@Service
public class LawReasoningKnowledgeService extends ServiceImpl<LawReasoningKnowledgeMapper, LawReasoningKnowledgePO> {
	/**
	 * 使用 案件类型 和 案由 来检索当前做法条推导的法条知识库中包含的法条范围.
	 *
	 * @param caseType  案件类型.
	 * @param caseCause 案由.
	 * @return 查询结果.
	 *
	 * @see LawReasoningRequestDTO.LawKnowledgeMetadataCondition
	 */
	public List<LawReasoningKnowledgePO> searchKnowledge(String caseType, String caseCause, Integer flag) {
		LambdaQueryWrapper<LawReasoningKnowledgePO> wrapper = new LambdaQueryWrapper<>();

		// 校验一下输入的参数，全是空就拉倒.
		if (Strings.isBlank(caseType) && Strings.isBlank(caseCause)) {
			return Collections.emptyList();
		}

		// 案件类型条件
		if (Strings.isNotBlank(caseType)) {
			wrapper.eq(LawReasoningKnowledgePO::getLrk_case_type, caseType);
		}

		// 案由条件
		if (Strings.isNotBlank(caseCause)) {
			wrapper.eq(LawReasoningKnowledgePO::getLrk_case_cause, caseCause);
		}

		// flag
		if (flag != null) {
			wrapper.eq(LawReasoningKnowledgePO::getLrk_flag, flag);
		}

		// 查询现行有效的法规
		wrapper.eq(LawReasoningKnowledgePO::getLrk_effective_status, 17);

		return this.list(wrapper);
	}

	/**
	 * 查询方法重载.
	 * @param caseType 案件类型.
	 * @param caseCause 案由.
	 * @param lName 法规名称.
	 * @param tkxName 条款项名称.
	 * @return 查询结果.
	 *
	 * @see LawReasoningRequestDTO.LawKnowledgeMetadataCondition
	 */
	public List<LawReasoningKnowledgePO> searchKnowledge(String caseType, String caseCause, String lName, String tkxName) {
		// 校验一下输入的参数，全是空就拉倒.
		if (Strings.isBlank(caseType) && Strings.isBlank(caseCause) && Strings.isBlank(lName) && Strings.isBlank(tkxName)) {
			return Collections.emptyList();
		}

		LambdaQueryWrapper<LawReasoningKnowledgePO> wrapper = new LambdaQueryWrapper<>();

		// 案件类型条件
		if (Strings.isNotBlank(caseType)) {
			wrapper.eq(LawReasoningKnowledgePO::getLrk_case_type, caseType);
		}

		// 案由条件
		if (Strings.isNotBlank(caseCause)) {
			wrapper.eq(LawReasoningKnowledgePO::getLrk_case_cause, caseCause);
		}

		// 法规名称
		if (Strings.isNotBlank(lName)) {
			// TODO: 这里的 like 是有问题的，应该再参数里面传过来
			// 使用 like 是因为，原判决中引用的法规是 中华人民共和国民事诉讼法，知识库里面保存的是 中华人民共和国民事诉讼法（2023年修正）
		}

		// 条款项名称
		if (Strings.isNotBlank(tkxName)) {
			wrapper.eq(LawReasoningKnowledgePO::getLrk_tkx_name, tkxName);
		}

		// 查询现行有效的法规
		wrapper.eq(LawReasoningKnowledgePO::getLrk_effective_status, 17);

		return this.list(wrapper);
	}
}
